

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  
  <title>windows托盘图标检测 | k1988</title>
  <meta name="author" content="赵海洋">
  
  <meta name="description" content="个人博客">
  
  
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

  <meta property="og:title" content="windows托盘图标检测"/>
  <meta property="og:site_name" content="k1988"/>

  
    <meta property="og:image" content="undefined"/>
  

  <link href="/favicon.ico" rel="icon" type="image/x-ico">
  <link rel="alternate" href="http://k1988.github.com/rss.xml" title="k1988" type="application/rss+xml">
  <link rel="stylesheet" href="/css/style.css" media="screen" type="text/css">
  <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
  <script src="//libs.baidu.com/jquery/1.8.0/jquery.min.js"></script>
</head>


<body>
  <header id="header" class="inner">
<div class="alignleft">
  <h1><a href="/">k1988</a></h1>
  <h2><a href="/"></a></h2>
</div>
<nav id="main-nav" class="alignright">
  <ul>
    
      <li><a href="/">首页</a></li>
    
      <li><a href="/archives">归档</a></li>
    
      <li><a href="/about">关于</a></li>
    
	<li> <a href="/rss.xml">RSS</a> </li>
<li> <a title="把这个链接拖到你的Chrome收藏夹工具栏中" href='javascript:(function() {
	function c() {
		var e = document.createElement("link");
		e.setAttribute("type", "text/css");
		e.setAttribute("rel", "stylesheet");
		e.setAttribute("href", f);
		e.setAttribute("class", l);
		document.body.appendChild(e)
	}
 
	function h() {
		var e = document.getElementsByClassName(l);
		for (var t = 0; t < e.length; t++) {
			document.body.removeChild(e[t])
		}
	}
 
	function p() {
		var e = document.createElement("div");
		e.setAttribute("class", a);
		document.body.appendChild(e);
		setTimeout(function() {
			document.body.removeChild(e)
		}, 100)
	}
 
	function d(e) {
		return {
			height : e.offsetHeight,
			width : e.offsetWidth
		}
	}
 
	function v(i) {
		var s = d(i);
		return s.height > e && s.height < n && s.width > t && s.width < r
	}
 
	function m(e) {
		var t = e;
		var n = 0;
		while (!!t) {
			n += t.offsetTop;
			t = t.offsetParent
		}
		return n
	}
 
	function g() {
		var e = document.documentElement;
		if (!!window.innerWidth) {
			return window.innerHeight
		} else if (e && !isNaN(e.clientHeight)) {
			return e.clientHeight
		}
		return 0
	}
 
	function y() {
		if (window.pageYOffset) {
			return window.pageYOffset
		}
		return Math.max(document.documentElement.scrollTop, document.body.scrollTop)
	}
 
	function E(e) {
		var t = m(e);
		return t >= w && t <= b + w
	}
 
	function S() {
		var e = document.createElement("audio");
		e.setAttribute("class", l);
		e.src = i;
		e.loop = false;
		e.addEventListener("canplay", function() {
			setTimeout(function() {
				x(k)
			}, 500);
			setTimeout(function() {
				N();
				p();
				for (var e = 0; e < O.length; e++) {
					T(O[e])
				}
			}, 15500)
		}, true);
		e.addEventListener("ended", function() {
			N();
			h()
		}, true);
		e.innerHTML = " <p>If you are reading this, it is because your browser does not support the audio element. We recommend that you get a new browser.</p> <p>";
		document.body.appendChild(e);
		e.play()
	}
 
	function x(e) {
		e.className += " " + s + " " + o
	}
 
	function T(e) {
		e.className += " " + s + " " + u[Math.floor(Math.random() * u.length)]
	}
 
	function N() {
		var e = document.getElementsByClassName(s);
		var t = new RegExp("\\b" + s + "\\b");
		for (var n = 0; n < e.length; ) {
			e[n].className = e[n].className.replace(t, "")
		}
	}
 
	var e = 30;
	var t = 30;
	var n = 350;
	var r = 350;
	var i = "//s3.amazonaws.com/moovweb-marketing/playground/harlem-shake.mp3";
	var s = "mw-harlem_shake_me";
	var o = "im_first";
	var u = ["im_drunk", "im_baked", "im_trippin", "im_blown"];
	var a = "mw-strobe_light";
	var f = "//s3.amazonaws.com/moovweb-marketing/playground/harlem-shake-style.css";
	var l = "mw_added_css";
	var b = g();
	var w = y();
	var C = document.getElementsByTagName("*");
	var k = null;
	for (var L = 0; L < C.length; L++) {
		var A = C[L];
		if (v(A)) {
			if (E(A)) {
				k = A;
				break
			}
		}
	}
	if (A === null) {
		console.warn("Could not find a node of the right size. Please try a different page.");
		return
	}
	c();
	S();
	var O = [];
	for (var L = 0; L < C.length; L++) {
		var A = C[L];
		if (v(A)) {
			O.push(A)
		}
	}
})()    '>High一下</a> </li>

  </ul>
  <div class="clearfix"></div>
</nav>
<div class="clearfix"></div></header>
  <div id="content" class="inner">
    <div id="main-col" class="alignleft"><div id="wrapper"><article class="post">
  
    <div class="gallery">
  <div class="photoset">
    
      <img src="">
    
  </div>
  <div class="control">
    <div class="prev"></div>
    <div class="next"></div>
  </div>
</div>
  
  <div class="post-content">
    <header>
      
        <div class="icon"></div>
        <time datetime="2016-11-10T07:20:28.000Z"><a href="/2016/11/106_windows托盘图标检测/">2016-11-10</a></time>
      
      
  
    <h1 class="title">windows托盘图标检测</h1>
  

    </header>
    <div class="entry">
      
        <p>由于业务需要，研究一下如何用程序判断右下角拖盘中某图标在什么时候隐藏到溢出区。经过多方资料查找，最终输出可用代码。支持windows xp至windows 10的32位和64位下的图标检测。</p>
<p>32位程序中读取64位explorer进程中的信息时，网上大多只给出了32位的结构体定义，所以根据调试时查看内存分布，调整了下64位的结构体。</p>
<p>代码如下：<br><a id="more"></a></p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">typedef struct TBBUTTON64 &#123;</span><br><span class="line">	int iBitmap;</span><br><span class="line">	int idCommand;</span><br><span class="line">	BYTE fsState;	// TBSTATE_CHECKED 等</span><br><span class="line">	BYTE fsStyle;	// TBSTYLE_BUTTON 等</span><br><span class="line">	BYTE bReserved[6];</span><br><span class="line">	int64_t dwData;</span><br><span class="line">	int64_t iString;</span><br><span class="line">	BYTE test[100];</span><br><span class="line">&#125; ;</span><br><span class="line">struct TRAYDATA64</span><br><span class="line">&#123;</span><br><span class="line">	int64_t hWnd;</span><br><span class="line">	uint32_t uID;</span><br><span class="line">	uint32_t uCallbackMessage;</span><br><span class="line">	uint32_t Reserved1[2];</span><br><span class="line">	int64_t hIcon;</span><br><span class="line">	uint32_t Reserved2[4];</span><br><span class="line">	TCHAR szExePath[MAX_PATH];</span><br><span class="line">	TCHAR szTip[128]; </span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">struct TRAYDATA32 </span><br><span class="line">&#123; </span><br><span class="line">	HWND hwnd;</span><br><span class="line">	UINT uID;</span><br><span class="line">	UINT uCallbackMessage;</span><br><span class="line">	DWORD Reserved[2];</span><br><span class="line">	HICON hIcon;</span><br><span class="line">	DWORD Reserved2[3];</span><br><span class="line">	TCHAR szExePath[MAX_PATH];</span><br><span class="line">	TCHAR szTip[128]; </span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">bool IsWow64ProcessEx( HANDLE hProcess )</span><br><span class="line">&#123;</span><br><span class="line">	/*判断ntdll中的导出函数,可知是否是64位OS*/</span><br><span class="line">	HMODULE hMod = GetModuleHandle(_T(&quot;ntdll.dll&quot;));</span><br><span class="line">	FARPROC x64fun = ::GetProcAddress(hMod,&quot;ZwWow64ReadVirtualMemory64&quot;);</span><br><span class="line">	if(!x64fun) </span><br><span class="line">	&#123;</span><br><span class="line">		return false;</span><br><span class="line">	&#125;</span><br><span class="line"></span><br><span class="line">	/*利用IsWow64Process判断是否是x64进程*/</span><br><span class="line">	typedef BOOL(WINAPI *pfnIsWow64Process)(HANDLE,PBOOL);</span><br><span class="line">	pfnIsWow64Process fnIsWow64Process = NULL;</span><br><span class="line"></span><br><span class="line">	hMod = GetModuleHandle(_T(&quot;kernel32.dll&quot;));</span><br><span class="line">	fnIsWow64Process = (pfnIsWow64Process)GetProcAddress(hMod,&quot;IsWow64Process&quot;);</span><br><span class="line">	if(!fnIsWow64Process) //如果没有导出则判定为32位</span><br><span class="line">	&#123;</span><br><span class="line">		return false;</span><br><span class="line">	&#125;</span><br><span class="line"></span><br><span class="line">	BOOL bX64;</span><br><span class="line">	if(!fnIsWow64Process(hProcess, &amp;bX64))</span><br><span class="line">	&#123;</span><br><span class="line">		return false;</span><br><span class="line">	&#125;</span><br><span class="line"></span><br><span class="line">	return !bX64;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">template&lt;typename BUTTONTYPE, typename TRAYDATA_TYPE&gt;</span><br><span class="line">void EnumIcons(size_t buttonNumber, HANDLE hProcess, LPVOID pAddress, HWND hWnd)</span><br><span class="line">&#123;</span><br><span class="line">	for( int i=0; i&lt; buttonNumber; i++ )</span><br><span class="line">	&#123;</span><br><span class="line">		long lRet = 0;</span><br><span class="line"></span><br><span class="line">		// 读取图标结构体</span><br><span class="line">		BUTTONTYPE buttonInfo = &#123;0&#125;;</span><br><span class="line">		DWORD dwBytes = 0;</span><br><span class="line">		::WriteProcessMemory(hProcess, pAddress, &amp;buttonInfo, sizeof(buttonInfo), &amp;dwBytes);</span><br><span class="line">		lRet = ::SendMessage( hWnd, TB_GETBUTTON, i, long(pAddress) );</span><br><span class="line">		lRet = ReadProcessMemory( hProcess, pAddress, &amp;buttonInfo, sizeof(buttonInfo), &amp;dwBytes);</span><br><span class="line"></span><br><span class="line">		// 读取TrayData</span><br><span class="line">		TRAYDATA_TYPE trayData;</span><br><span class="line">		lRet =  ::ReadProcessMemory(hProcess, (LPVOID)buttonInfo.dwData, &amp;trayData, sizeof(trayData), NULL);</span><br><span class="line"></span><br><span class="line">		// 方法1. 直接从ButtonInfo成员的string地址读取图标标题</span><br><span class="line">		TCHAR szTips[1024];</span><br><span class="line">		::ReadProcessMemory(hProcess, (void*)(buttonInfo.iString),szTips, 1024, &amp;dwBytes);</span><br><span class="line">		OutputDebugString(szTips);</span><br><span class="line"></span><br><span class="line">		// 方法2. 从TrayData中读取图标标题和程序路径</span><br><span class="line">		OutputDebugString(trayData.szTip);</span><br><span class="line">		OutputDebugString(trayData.szExePath);</span><br><span class="line"></span><br><span class="line">		// 方法3. 发送消息，读取图标标题</span><br><span class="line">		SendMessage(hWnd, TB_GETBUTTONTEXT, buttonInfo.idCommand, LPARAM(LPARAM(pAddress) + sizeof(buttonInfo)));</span><br><span class="line">		::ReadProcessMemory(hProcess, (void*)(LPARAM(pAddress) + sizeof(buttonInfo)),szTips, 1024, &amp;dwBytes);</span><br><span class="line">		OutputDebugString(szTips);</span><br><span class="line">	&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">// 判断在通知区域是否有托盘图标</span><br><span class="line">BOOL IsTrayIconExsitInNotifyArea()</span><br><span class="line">&#123;</span><br><span class="line">	HWND hWnd = NULL, hWndPager = NULL;</span><br><span class="line">	unsigned long ulPID = 0;</span><br><span class="line">	long lRet = 0, lButtons = 0;</span><br><span class="line">	HANDLE hProcess = NULL;</span><br><span class="line">	LPVOID pAddress = NULL;</span><br><span class="line">	long lTextAdr = 0, lHwndAdr = 0, lHwnd = 0, lButtonID = 0;</span><br><span class="line">	char strBuff[1024] = &#123; 0 &#125;;</span><br><span class="line">	char_t *pStr = NULL;</span><br><span class="line">	char *pTemp = NULL;</span><br><span class="line"></span><br><span class="line">	hWnd = ::FindWindow( _T(&quot;Shell_TrayWnd&quot;), NULL );</span><br><span class="line">	hWnd = ::FindWindowEx( hWnd, 0, _T(&quot;TrayNotifyWnd&quot;), NULL );</span><br><span class="line">	hWndPager = ::FindWindowEx( hWnd, 0, _T(&quot;SysPager&quot;), NULL );</span><br><span class="line">	if( hWndPager == NULL )</span><br><span class="line">	&#123;</span><br><span class="line">		hWnd = ::FindWindowEx( hWnd, 0, _T(&quot;ToolbarWindow32&quot;), NULL ); // 对于Win2000，没有SysPager窗口</span><br><span class="line">	&#125;</span><br><span class="line">	else</span><br><span class="line">	&#123;</span><br><span class="line">		hWnd = ::FindWindowEx( hWndPager, 0, _T(&quot;ToolbarWindow32&quot;), NULL );</span><br><span class="line">	&#125;</span><br><span class="line"></span><br><span class="line">	lRet = GetWindowThreadProcessId( hWnd, &amp;ulPID );</span><br><span class="line">	hProcess = OpenProcess(PROCESS_ALL_ACCESS|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, 0, ulPID );</span><br><span class="line">	pAddress = VirtualAllocEx( hProcess, 0, 0x4096, MEM_COMMIT, PAGE_READWRITE );</span><br><span class="line">	lButtons = ::SendMessage( hWnd, TB_BUTTONCOUNT, 0, 0 );</span><br><span class="line"></span><br><span class="line">	if (IsWow64ProcessEx(hProcess))</span><br><span class="line">	&#123;</span><br><span class="line">		EnumIcons&lt;TBBUTTON64, TRAYDATA64&gt;(lButtons, hProcess, pAddress, hWnd);</span><br><span class="line">	&#125;</span><br><span class="line">	else</span><br><span class="line">	&#123;</span><br><span class="line">		EnumIcons&lt;TBBUTTON, TRAYDATA32&gt;(lButtons, hProcess, pAddress, hWnd);</span><br><span class="line">	&#125;</span><br><span class="line"></span><br><span class="line">	VirtualFreeEx( hProcess, pAddress, 0X4096, MEM_RELEASE );</span><br><span class="line">	CloseHandle( hProcess );</span><br><span class="line"></span><br><span class="line">	return FALSE;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">// 判断在托盘溢出区域是否有托盘图标</span><br><span class="line">BOOL IsTrayIconExsitInOverflowWindow()</span><br><span class="line">&#123;</span><br><span class="line">	HWND hWnd = NULL, hWndPager = NULL;</span><br><span class="line">	unsigned long ulPID = 0;</span><br><span class="line">	long lRet = 0, lButtons = 0;</span><br><span class="line">	HANDLE hProcess = NULL;</span><br><span class="line">	LPVOID pAddress = NULL;</span><br><span class="line">	long lTextAdr = 0, lHwndAdr = 0, lHwnd = 0, lButtonID = 0;</span><br><span class="line">	char strBuff[1024] = &#123; 0 &#125;;</span><br><span class="line">	char_t *pStr = NULL;</span><br><span class="line">	char *pTemp = NULL;</span><br><span class="line"></span><br><span class="line">	// 对于Win7、Win8系统，新增了通知溢出区域，所以要检查该区域中是否有托盘图标</span><br><span class="line">	hWnd = ::FindWindow( _T(&quot;NotifyIconOverflowWindow&quot;), NULL );</span><br><span class="line">	hWnd = ::FindWindowEx( hWnd, 0, _T(&quot;ToolbarWindow32&quot;), NULL );</span><br><span class="line"></span><br><span class="line">	lRet = GetWindowThreadProcessId( hWnd, &amp;ulPID );</span><br><span class="line">	hProcess = OpenProcess(PROCESS_ALL_ACCESS|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, 0, ulPID );</span><br><span class="line">	pAddress = VirtualAllocEx( hProcess, 0, 0x4096, MEM_COMMIT, PAGE_READWRITE );</span><br><span class="line">	lButtons = ::SendMessage( hWnd, TB_BUTTONCOUNT, 0, 0 );</span><br><span class="line"></span><br><span class="line">	if (IsWow64ProcessEx(hProcess))</span><br><span class="line">	&#123;</span><br><span class="line">		EnumIcons&lt;TBBUTTON64, TRAYDATA64&gt;(lButtons, hProcess, pAddress, hWnd);</span><br><span class="line">	&#125;</span><br><span class="line">	else</span><br><span class="line">	&#123;</span><br><span class="line">		EnumIcons&lt;TBBUTTON, TRAYDATA32&gt;(lButtons, hProcess, pAddress, hWnd);</span><br><span class="line">	&#125;</span><br><span class="line"></span><br><span class="line">	VirtualFreeEx( hProcess, pAddress, 0X4096, MEM_RELEASE );</span><br><span class="line">	CloseHandle( hProcess );</span><br><span class="line"></span><br><span class="line">	return FALSE;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>参考资料：</p>
<ul>
<li><a href="http://forums.codeguru.com/showthread.php?306661-How-to-always-show-an-icon-in-system-tray" target="_blank" rel="external">http://forums.codeguru.com/showthread.php?306661-How-to-always-show-an-icon-in-system-tray</a></li>
<li><a href="http://bbs.csdn.net/topics/390877496" target="_blank" rel="external">http://bbs.csdn.net/topics/390877496</a></li>
<li><a href="http://bbs.csdn.net/topics/80237414" target="_blank" rel="external">http://bbs.csdn.net/topics/80237414</a></li>
<li><a href="http://blog.csdn.net/wzsy/article/details/47980317" target="_blank" rel="external">http://blog.csdn.net/wzsy/article/details/47980317</a></li>
<li><a href="http://www.cnblogs.com/croot/p/3496576.html" target="_blank" rel="external">http://www.cnblogs.com/croot/p/3496576.html</a></li>
</ul>

      
    </div>
    <footer>
      
        
  
  <div class="categories">
    <a href="/categories/windows/">windows</a>
  </div>

        
  
  <div class="tags">
    <a href="/tags/windows-shell/">windows shell</a>
  </div>

<!-- Baidu Button BEGIN -->
<div id="bdshare" class="bdshare_t bds_tools_32 get-codes-bdshare">
<a class="bds_qzone"></a>
<a class="bds_tsina"></a>
<a class="bds_tqq"></a>
<a class="bds_renren"></a>
<a class="bds_t163"></a>
<span class="bds_more"></span>
<a class="shareCount"></a>
</div>
<script type="text/javascript" id="bdshare_js" data="type=tools&amp;uid=3326447" ></script>
<script type="text/javascript" id="bdshell_js"></script>
<script type="text/javascript">
document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000)
</script>
<!-- Baidu Button END -->      
      <div class="clearfix"></div>
    </footer>
  </div>
</article>



 <nav id="pagination" >
    
    <a href="/2016/11/107_baidupingyin_crash/" class="alignleft prev" >上一页</a>
    
    
    <a href="/2016/10/105_MC用户的UUID生成规则/" class="alignright next" >下一页</a>
    
    <div class="clearfix"></div>
</nav>

<section id="comment">

<!-- 多说评论框 start -->
	<div class="ds-thread" data-thread-key="/2016/11/106_windows托盘图标检测/" data-title="windows托盘图标检测" data-url="/2016/11/106_windows托盘图标检测/"></div>
<!-- 多说评论框 end -->
<!-- 多说公共JS代码 start (一个网页只需插入一次) -->
<script type="text/javascript">
var duoshuoQuery = {short_name:"k1988"};
	(function() {
		var ds = document.createElement('script');
		ds.type = 'text/javascript';ds.async = true;
		ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//static.duoshuo.com/embed.js';
		ds.charset = 'UTF-8';
		(document.getElementsByTagName('head')[0] 
		 || document.getElementsByTagName('body')[0]).appendChild(ds);
	})();
	</script>
<!-- 多说公共JS代码 end -->

  
</section>

</div></div>
    <aside id="sidebar" class="alignright">
  <div class="search">
  <form action="//google.com/search" method="get" accept-charset="utf-8">
    <input type="search" name="q" results="0" placeholder="搜索">
    <input type="hidden" name="q" value="site:baba.zhaoxiuyuan.com">
  </form>
</div>

  
<div class="widget tag">
  <h3 class="title">分类</h3>
  <ul class="entry">
  
    <li><a href="/categories/C/">C++</a><small>4</small></li>
  
    <li><a href="/categories/net/P2P/">P2P</a><small>2</small></li>
  
    <li><a href="/categories/WEB/">WEB</a><small>1</small></li>
  
    <li><a href="/categories/WINDOWS编程/">WINDOWS编程</a><small>6</small></li>
  
    <li><a href="/categories/bugs/">bugs</a><small>2</small></li>
  
    <li><a href="/categories/ie/flash/">flash</a><small>1</small></li>
  
    <li><a href="/categories/ie/">ie</a><small>1</small></li>
  
    <li><a href="/categories/java/">java</a><small>5</small></li>
  
    <li><a href="/categories/java/minecraft/">minecraft</a><small>2</small></li>
  
    <li><a href="/categories/net/">net</a><small>2</small></li>
  
    <li><a href="/categories/python/">python</a><small>1</small></li>
  
    <li><a href="/categories/windows/">windows</a><small>2</small></li>
  
    <li><a href="/categories/bugs/windows/">windows</a><small>1</small></li>
  
    <li><a href="/categories/工具/">工具</a><small>1</small></li>
  
    <li><a href="/categories/开源项目/">开源项目</a><small>2</small></li>
  
    <li><a href="/categories/未分类/">未分类</a><small>0</small></li>
  
    <li><a href="/categories/系统-工具/">系统/工具</a><small>7</small></li>
  
    <li><a href="/categories/软件/">软件</a><small>2</small></li>
  
  </ul>
</div>


  <div class="widget tag">
<h3 class="title">简介</h3>
<ul class="entry">
<li>本体：赵海洋</li>
<li>二次元：k1988 | 赵大海</li>
<li>现状：大蓝鲸某IT公司研发部经理</li>
<li>QQ 号：1811132352</li>
<li>早期博客：<a href="http://blog.csdn.net/k1988/">CSDN博客</a></li>
</ul>
</div>



  <iframe width="100%" height="550" class="share_self"  frameborder="0" scrolling="no" src="http://widget.weibo.com/weiboshow/index.php?language=&width=0&height=550&fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=1&isFans=1&uid=1196349092&verifier=d3636f5c&dpc=1"></iframe>
</aside>
    <div class="clearfix"></div>
  </div>
  <footer id="footer" class="inner"><section>
Theme of <a href="https://github.com/k1988/lightum">Lightum</a>, Improved from <a href="https://github.com/hexojs/hexo-theme-light">Light</a>, by <a href="/">k1988</a> 
<script async src="//dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<span id="busuanzi_container_site_pv">本站总访问量<span id="busuanzi_value_site_pv"></span>次</span>
</section>
<div class="clearfix"></div>
</footer>
  <script src="//libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>
<script src="/js/jquery.imagesloaded.min.js"></script>
<script src="/js/gallery.js"></script>




<link rel="stylesheet" href="/fancybox/jquery.fancybox.css" media="screen" type="text/css">
<script src="/fancybox/jquery.fancybox.pack.js"></script>
<script type="text/javascript">
(function($){
  $('.fancybox').fancybox();
})(jQuery);
</script>


<!-- mathjax config similar to math.stackexchange -->

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    tex2jax: {
      inlineMath: [ ['$','$'], ["\\(","\\)"] ],
      processEscapes: true
    }
  });
</script>

<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
      tex2jax: {
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
      }
    });
</script>

<script type="text/x-mathjax-config">
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax(), i;
        for(i=0; i < all.length; i += 1) {
            all[i].SourceElement().parentNode.className += ' has-jax';
        }
    });
</script>

<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
</body>
</html>


<a href="https://github.com/k1988" target="_blank"><img style="position: absolute; top: 0; left: 0; border: 0;" src="/imgs/forkme_left_green_007200.png" alt="Fork me on GitHub"></a>
